﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice_Sunday_20
{
    class Program
    {
        static void Main(string[] args)
        {
            //_________________________________________________________________Метод Main с выбором задания

            string finalChoice;
            do
            {
                Console.Clear();
                Console.WriteLine(@"Пожалуйста, укажите номер приложения, которое хотите запустить:
1 - Указать количество чисел. Определение количества положительных и отрицательных чисел, а также количество нолей;
2 - Вывод на экран всех двузначных чисел кратных 5;
3 - Ввод числа. Определение количества цифр в введенном числе. Определение наибольшей и найменьшей цифры числа;
4 - Вывод квадрата чисел от 10 до 20 вкючительно;
5 - Вывод максимального числ из введенных пяти;
6 - Подсчет количество амёб каждые 3 часа;
7 - Подсчет прибыли от 3х-процентного депозита вводимой суммы на указанный срок;
8 - Вывод натуральных чисел от 20 до 50, которые деляться на 3, но не деляться на 5;
9 - Ввод числа и вывод цифр этого числа в обратном порядке.");
                Console.Write("Задание # ");
                //int varChoice = Int32.Parse(Console.ReadLine());
                int varChoice;
                bool incorChoice = Int32.TryParse(Console.ReadLine(), out varChoice);
                switch (varChoice)
                {
                    case 1:
                        EnterNumeric();
                        break;
                    case 2:
                        twoTimeDigites();
                        break;
                    case 3:
                        numberOfDigities();
                        break;
                    case 4:
                        SquareOfNumber();
                        break;
                    case 5:
                        Maximum();
                        break;
                    case 6:
                        AmebasCount();
                        break;
                    case 7:
                        ProfitFromDeposit();
                        break;
                    case 8:
                        NumberDividingIntoThreeFive();
                        break;
                    case 9:
                        DigiteReverse();
                        break;
                    case 10:
                        DigiteReverse2();
                        break;
                    default:
                        if (incorChoice == false || varChoice <= 0)
                        {
                            Console.WriteLine("Некорректный ввод!");
                        }
                        else
                        { 
                        Console.WriteLine("Выбран несуществующий вариант!");
                        }
                        break;
                }
                Console.WriteLine("\nЖелаете повторить выбор задания? Y - Да, N - нет.");
                do
                {
                    finalChoice = Console.ReadLine();
                    if (finalChoice != "Y" && finalChoice != "N")
                    {
                        Console.WriteLine("Некорректный ввод! Введите Y или N.");
                    }
                } while (finalChoice != "Y" && finalChoice != "N");
            } while (finalChoice == "Y");
            Console.WriteLine("\nСпасибо за внимание. До свидания!");
        }

        //_________________________________________________________________Задание 1

        static void EnterNumeric()
        {
            int countPositive = 0;
            int countNegative = 0;
            int countZero = 0;
            Console.WriteLine("Введите количество чисел");
            int numberOfDigites = Int32.Parse(Console.ReadLine());
            int number;
            Console.WriteLine("Введите числа");
            for (; numberOfDigites > 0; numberOfDigites--)
                {
                number = Int32.Parse(Console.ReadLine());
                    if (number > 0)
                    {
                        countPositive++;
                    }
                    else if (number < 0)
                    {
                        countNegative++;
                    }
                    else
                    {
                        countZero++;
                    }
                }
            Console.WriteLine("Количество положительных: {0}.\nКоличество отрицательных: {1}.\nКоличество нолей: {2}.", countPositive, countNegative, countZero);
        }

        //_________________________________________________________________Задание 2

        static void twoTimeDigites()
        {
            Console.WriteLine("Подсчет двузначных чисел кратных 5.");
            for (int i = -99; i <= 99; i++)
            {
                if (Math.Abs(i / 10) >= 1 && i % 5 == 0)
                {
                    Console.WriteLine(i);
                }

            }

            // Второй способ

            //for (int i = -10; i >= -99; i--)
            //{
            //    if (i % 5 == 0)
            //    {
            //        Console.WriteLine(i);
            //    }
            //}
            //for (int j = 10; j <= 99; j++)
            //{
            //    if (j % 5 == 0)
            //    {
            //        Console.WriteLine(j);
            //    }
            //}

        }
        //_________________________________________________________________Задание 3

        static void numberOfDigities()
        {

            Console.WriteLine("Введите число");
            int number = Int32.Parse(Console.ReadLine());
            int tempResult = number;
            int digites;
            int count = 0;
            int max = 0;
            int min = 9;

            do
            {
                digites = tempResult % 10;
                tempResult = tempResult / 10;
                count++;
                if (digites > max)
                {
                    max = digites;
                }
                if (digites < min)
                {
                    min = digites;
                }
            }
            while (tempResult > 0);
            Console.WriteLine("Количество знаков в числе {0} равняется: {1}.\nНаибольшая цифра: {2}.\nНаименьшая цифра: {3}.", number, count, max, min);
        }

        //_________________________________________________________________Задание 4

        static void SquareOfNumber()
        {
            for (int i = 10; i <= 20; i++)
            {
                Console.WriteLine("Квадрат числа {0} составляет: {1}", i, i*i);
            }
        }

        //_________________________________________________________________Задание 5

        static void Maximum()
        {
            Console.WriteLine("Введите 5 чисел: ");
            int number;
            int max = 0;
            for (int i = 0; i < 5; i++)
            {
                number = Int32.Parse(Console.ReadLine());
                if (i == 0)
                {
                    max = number;
                }
                else if (number > max)
                {
                    max = number;
                }
                else
                {
                    continue;
                }

            }
            Console.WriteLine("Максималное число: " + max);
        }
        

        //_________________________________________________________________Задание 6

        static void AmebasCount()
        {
            Console.WriteLine("Амеба каждые пол часа делиться на 2 клетки. Посчитать сколько амеб получится через 3, 6, 9, 12...24 часа.");
            int amountOfAmeba = 1;
            for (int hour = 3; hour <= 24; hour += 3)
            {
                amountOfAmeba *= 2;
                Console.WriteLine("Количество амёб через {0} ч. равняется {1} шт.", hour, amountOfAmeba);
            }
        }

        //_________________________________________________________________Задание 7
        // В банк на трёхпроцентный вклад положили S гривен. Какой станет сумма вклада через N лет.

        static void ProfitFromDeposit()
        {
            Console.WriteLine("Please enter an amount of money for deposit, $: ");
            decimal money = Decimal.Parse(Console.ReadLine());
            Console.WriteLine("Please enter the number of years for your deposit duration: ");
            int yearsALL = Int32.Parse(Console.ReadLine());
            int yearsLeft = 1;
            decimal profit = money;
            decimal benefit = 0;
            decimal totalBenefit = 0;
            string strYear = "year";
            
            while (yearsLeft <= yearsALL)
            {
                if (yearsLeft == 1)
                {
                    strYear = "year";
                }
                else
                {
                    strYear = "years";
                }
                benefit = (profit / 100) * 3; 
                profit += benefit;
                Console.WriteLine("The benefit after {0} {1} left is - ${3:#.##}\nThe sum of accumulated money after {0} {1} left is - ${2:#.##} ", yearsLeft, strYear, profit, benefit);
                totalBenefit += benefit;
                yearsLeft++;
            }
            Console.WriteLine("\nThe total benefit after {0} {1} left from the ${2} is: ${3:#.##}", yearsALL, strYear, money, totalBenefit);
        }


        //_________________________________________________________________Задание 8
        // Даны натуральные числа от 20 до 50. Напечатать те из них, которые делятся на 3, но не делятся на 5.

        static void NumberDividingIntoThreeFive()
        {
            Console.WriteLine("There are numbers between 20 and 50 that can be divided into 3, but cannot be divided into 5: ");
            for (int i = 20; i <= 50; i++)
            {
                if(i % 3 == 0 && i % 5 != 0)
                {
                    Console.WriteLine(i);
                }
            }
        }

        //_________________________________________________________________Задание 9
        // Вводится число. Преобразовать его в другое число, цифры которого будут следовать в обратном порядке.

        static void DigiteReverse()
        {
            Console.WriteLine("Please enter the number: ");
            int number = Int32.Parse(Console.ReadLine());
            int digiteback = 0;
            Console.WriteLine("The entered nuber in reverse: ");
            while (number > 0)
            {
                digiteback = number % 10;
                Console.Write(digiteback);
                number = number / 10;
            }
            Console.WriteLine();
        }

        static void DigiteReverse2()
        {
            Console.WriteLine("Please enter the number: ");
            int number = Int32.Parse(Console.ReadLine());
            int digiteback = 0;
            string finalNumber = "";
            int fullNumberBack = 0;

            // Console.WriteLine("The entered nuber in reverse: ");

            while (number > 0)
            {
                digiteback = number % 10;
                //Console.Write(digiteback);
                finalNumber += digiteback.ToString();
                number = number / 10;
            }
            fullNumberBack = Int32.Parse(finalNumber);
            Console.WriteLine("The entered nuber in reverse: \n" + fullNumberBack);
        }

    }
}
